Данные хранятся в файле. Файл может иметь любое расширение, т.к. считываются его байты. Ввод пользовательских значений осуществляется с помощью функции 'user_input'. Если пользователь хочет зашифровать/расшифровать файл - ему предлагается выбор файла для считывания информации и выбор имени для нового файла, который будет создан и куда будут записаны зашифрованные/расшифрованные данные. Байты и пользовательские значения передаются в функцию 'encrypt_func'. 

Функция шифрования 'encrypt_func':
    В функции байты переводятся в формат int.
    Затем создается массив преобразованной уже численной строки:

    Функция разрядности 'use_razradnost':
        Так как разрядность, задаваемая пользователем обязательно влияет только на вывод значений функции, 
        чтобы алгоритм отрабатывал нормально при любом значении лямбда было создано следующее правило:
        if lam >= 0: 
            razr = (2**razradnost)
        else:
            razr = razradnost 
        Это правило определяет на сколько подэлементов, или же, на скольки значные подчисла будет разбито первичное число. 
        Это было сделано, т.к. пользователь может выбрать, например, не короткий текстовый файл, а изображение - в таком случае 
        из-за очень большого значения числа дальнейшее выполнение может отрабатывать не корректно.

        Здесь происходит первичное представление данных в виде дробных чисел:
        Исходное большое число разбивается на составные части, которые потом с помощью  float_ff = int_ff/(10**razradnost) 
        преобразуются в подходящие, с нужным количеством разрядов после ',' цифр. 
        Эти числа записываются в новый массив и передаются обратно в функцию шифрования. 

    Полученные ранее числа нужной(выбранной пользователем) разрядности передаются дальше одной из функций 'f1' или 'f2':
    if (el >= 0) and (el <= lam): 
        modified_el = el/lam
    elif (el > lam) and (el <= 1):
        modified_el = (1-el)/(1-lam)  

    Дальше полученные значения передаются в функцию округления 'use_okruglenie':
    Функция округления 'use_okruglenie':
        Здесь используется функция 'decimal', импортируемая в начале файла. 
        С помощью 'zeros' происходит выбор нужной дальности/разрядности для округления:

            D = decimal.Decimal
            zeros = '0'*razradnost 

            if okruglenie == 'round': #correct as if
                f = round(f, razradnost)
            elif okruglenie == 'ceil':
                #D("0.4400001").quantize(D("1.00"), decimal.ROUND_CEILING)
                # Decimal('0.45')
                f = D(f).quantize(D("1."+zeros), decimal.ROUND_CEILING)
                print("f ceil = ", f)
            elif okruglenie == 'floor':
                f = D(f).quantize(D("1."+zeros), decimal.ROUND_FLOOR)
            elif okruglenie == 'trunc':
                f = D(f).quantize(D("1."+zeros), decimal.ROUND_DOWN)
            else:
                print("wrong input of method okruglenia. exiting")
                sys.exit()

    Полученные округленные значения переводятся в байты и передаются обратно, функции 'file_encrypt' для записи в файл.